package br.com.saeng2D.formulario.caixa_forca_d_t;

import java.awt.Insets; 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import br.com.saeng2D.formulario.caixa.ContainerAnimado;
import br.com.saeng2D.formulario.caixa.ControleAnimado;
import br.com.saeng2D.formulario.caixa.Dialogo;
import br.com.saeng2D.objeto.forca.ForcaDistribuida;
import br.com.saeng2D.util.TextFieldNumero;

public class ControleContainerAnimadoForcaD extends ControleAnimado implements ActionListener {
	private static final long serialVersionUID = 1L;
	private JLabel labelNM = new JLabel("N/m");
	private JTextField textFieldVariavelForca = new TextFieldNumero(Short.MAX_VALUE);
//	private JTextField textFieldForcaDistribuida = new JTextField();
	private JRadioButton radioNegativo = new JRadioButton("Positivo", true); 
	private JRadioButton radioPositivo = new JRadioButton("Negativo"); 
	
	public ControleContainerAnimadoForcaD(String tituloObjetoAnimado, ContainerAnimado containerAnimado, Dialogo dialogo, int x, int y, int largura, int altura) {
		super(tituloObjetoAnimado, containerAnimado, dialogo);
		montarLayout(x, y, largura, altura);
		registrarEvento();
		setBorder(BorderFactory.createRaisedBevelBorder());
		registrarEventoVariavelForca();
	}

	public void montarLayout(int x, int y, int largura, int altura) {
		setLayout(null);
		setBounds(x, y, largura, altura);

		labelTitulo.setBounds(45, 5, 170, 15);
		add(labelTitulo);

		containerAnimado.setBounds(45, 20, 160, 100);
		add(containerAnimado);
		textFieldVariavelForca.setBounds(48, altura - 70, largura - 100, 20);
		labelNM.setBounds(28 + largura - 75, altura - 70, 40, 20);
//		textFieldStringValorNewton.setText("0" + simboloGrau);
//		textFieldStringValorNewton.setEditable(false);
		add(textFieldVariavelForca);
		add(labelNM);
		ButtonGroup grupo = new ButtonGroup();
		grupo.add(radioNegativo);
		grupo.add(radioPositivo);

		radioNegativo.setBounds(35, altura - 35, 70, 30);
		radioNegativo.setMargin(new Insets(0, 0, 0, 0));
		add(radioNegativo);

		radioPositivo.setBounds(125, altura - 35, 100, 30);
		radioPositivo.setMargin(new Insets(0, 0, 0, 0));
		add(radioPositivo);
	}
	
	public void registrarEvento() {
		radioNegativo.addActionListener(this);
		radioPositivo.addActionListener(this);
	}

	public void actionPerformed(ActionEvent e) {
		JRadioButton radio = (JRadioButton) e.getSource();
		ForcaDistribuida forcaDistribuida = (ForcaDistribuida)containerAnimado.getAbstratoAnimado();  
		forcaDistribuida.inicializacao();
		if(radio == radioPositivo) {
			forcaDistribuida.rotacionar(180);
		}
		containerAnimado.repaint();
	}
	
	public String getVariavelForca() {
		return textFieldVariavelForca.getText();
	}
	
	protected int get90GrausAuxiliar() {
		if(radioPositivo.isSelected()) {
			return 90;
		} else if(radioNegativo.isSelected()) {
			return -90;
		}
		return 0;
	}
	
//	public int getValorForcaDistribuida() throws Exception {
//		if(Util.estarNuloOuVazio(textFieldForcaDistribuida.getText())) {
//			throw new Exception("Informe o valor da força distribuída");
//		}
//		if(!Util.ehNumeroInteiro(textFieldForcaDistribuida.getText().trim())) {
//			throw new Exception("O valor da força distribuída deve ser um número inteiro");
//		}
//		return Integer.parseInt(textFieldForcaDistribuida.getText().trim());
//	}

	public void registrarEventoVariavelForca() {
		textFieldVariavelForca.addFocusListener(new FocusListener() {
			public void focusLost(FocusEvent e) {
			}
			public void focusGained(FocusEvent e) {
				containerAnimado.selecionar();
			}
		});
		textFieldVariavelForca.addKeyListener(new KeyListener() {
			public void keyTyped(KeyEvent e) {
			}
			public void keyReleased(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_ENTER) {
					dialogo.adicionarNaSuperficie();
				}
			}
			public void keyPressed(KeyEvent e) {
			}
		});
	}
}